package com.crm.service.customerManager;

import com.crm.model.dto.CustomerPoolDto;
import com.crm.model.entity.contactManager.Contact;
import com.crm.model.entity.customerManager.*;
import com.crm.model.entity.customerManager.CustomerPool;
import com.crm.model.qo.customerManager.CustomerPoolQO;
import com.crm.model.vo.cluePoolManager.UserCompanyVO;
import com.crm.model.vo.customerManager.CustomerPoolVO;
import com.crm.model.vo.customerManager.ModificationRecordVO;

import java.util.List;

/**
 * @ Author ：pym
 * @ Date   ：2021/1/15 10:11
 */
public interface CustomerPoolDbService {
    /**
     * 管理模块 -- 客户公海列表 -- 超级管理员
     * @param customerPoolQO
     * @param sortOrder
     * @return
     */
    List<CustomerPoolVO> selectAllCustomerPoolList(CustomerPoolQO customerPoolQO, Integer dateUnit, String sortOrder);

    /**
     * 管理模块 -- 客户公海列表 -- 普通管理员
     * @param customerPoolQO
     * @param sortOrder
     * @return
     */
    List<CustomerPoolVO> selectNormalCustomerPoolList(CustomerPoolQO customerPoolQO, Integer dateUnit, String sortOrder, String companyId);

    /**
     * 根据客户池名称查询客户池
     * @param customerPoolName
     * @return
     */
    CustomerPool selectCustomerPoolByName(String customerPoolName);

    /**
     * 插入客户池
     * @param customerPool
     * @return
     */
    Boolean insertCustomerPool(CustomerPool customerPool);

    /**
     * 管理模块-客户池开启/停用
     * @param customerPool
     * @return
     */
    Boolean updatePoolStateById(CustomerPool customerPool);

    /**
     * 根据客户id查询客户详细信息
     * @param customer_id 客户id
     * @return
     */
    Customer customerHighSeasDetail(String customer_id);

    /**
     * 根据客户id查询公司信息
     * @param customer_id 客户id
     * @return
     */
    CustomerCompanyInfo getCompanyInfo(String customer_id);

    /**
     * 根据客户id查询公司联系人信息
     * @param customer_id 客户id
     * @param isSeniorExecutive 高管状态 0高管 1非高管
     * @param abolishState 废止状态  1不查询废止的 2查询废止的
     * @return
     */
    List<CustomerContactPerson> customerContactPersonList(String order,String customer_id, int isSeniorExecutive,int abolishState);

    /**
     * 根据客户id查询联系人列表
     * @param customerId
     * @return
     */
    List<CustomerContactPerson> selectContactPersonListByCustomerId(String customerId);

    /**
     * 客户详情-新增客户下的联系人
     * @param customerContactPerson 客户联系人实体
     * @return
     */
    Boolean addCustomerContactPerson(CustomerContactPerson customerContactPerson);

    /**
     * 新增联系人管理的联系人
     * @param contact 联系人实体
     * @return
     */
    Boolean addContact(Contact contact);

    /**
     * 根据联系人id,回显联系人信息
     * @param customerContactPersonId 客户联系人id
     * @return
     */
    CustomerContactPerson getCustomerContactPerson(String customerContactPersonId);

    /**
     * 客户详情-修改联系人
     * @param customerContactPerson 客户联系人实体
     * @return
     */
    boolean updateCustomerContactPerson(CustomerContactPerson customerContactPerson);

    /**
     * 把修改的数据存放到修改信息表里
     * @param modificationRecord 修改记录实体
     * @return
     */
    boolean addModificationRecord(ModificationRecord modificationRecord);

    /**
     * 根据客户id查询公司修改记录
     * @param order 分组类型
     * @param customerId 客户id
     * @return
     */
    List<ModificationRecordVO> modificationRecordList(String order, String customerId);

    /**
     * 查询客户池是否重复
     * @param customerPoolName
     * @param customerPoolId
     * @return
     */
    Boolean isCustomerPoolRepeated(String customerPoolName, String customerPoolId);

    /**
     * 客户详情--联系人 开启/废止联系人
     * @param customerContactPerson 客户联系人实体
     * @return
     */
    Boolean updateAbolishStateById(CustomerContactPerson customerContactPerson);

    /**
     * 回显客户详情
     * @param customerId 客户id
     * @return
     */
    Customer getCustomer(String customerId);

    /**
     * 修改客户详情
     * @param customer 客户实体
     * @return
     */
    boolean updateCustomer(Customer customer);

    /**
     * 根据客户池id查询客户池信息
     * @param customerPoolId 客户池id
     * @return
     */
    CustomerPool selectCustomerPoolById(String customerPoolId);

    /**
     * 根据线客户ID查询公司
     * @param customerPoolId  ---客户池ID
     * @return
     */
    List<UserCompanyVO> selectDistributeCompany(String customerPoolId);

    /**
     * 根据用户名查询用户信息及所在公司信息(全国公有池、分公司公有池-分配-按人员姓名模糊查找)
     * @param userName ---用户名
     * @return
     */
    List<UserCompanyVO> selectUserAndCompany(String userName);

    /**
     * 查询分公司公有池的用户
     * @param companyIds ---公司ID集合
     * @param userName ---用户名
     * @return
     */
    List<UserCompanyVO>selectUserByPoolPermission(List<String> companyIds,String userName);

    /**
     * 查询所有启用的客户池
     * @return
     */
    List<CustomerPool> selectAllEnableCustomerPoolName();

    /**
     * 查询所有启用的全国客户池和用户对应的非公司客户池
     * @return
     */
    List<CustomerPool> selectPartEnableCustomerPoolName(String companyId);

    /**
     * 根据客户池id更新客户池
     * @Author pym
     * @Date  2021/6/17 15:48
     * @param customerPool 客户池
     * @return {@link {java.lang.Boolean}}
     */
    Boolean updateCustomerPoolById(CustomerPool customerPool);

    /**
     * 根据公司id查询客户池
     * @Author pym
     * @Date  2021/7/5 16:19
     * @param companyId 公司Id
     * @return {@link {com.crm.model.entity.customerManager.CustomerPool}}
     */
    CustomerPool selectCustomerPoolCompanyId(String companyId);

    /**
     * 根据名称查询客户池
     * @param name
     * @return
     */
    CustomerPoolDto selectPoolByName(String name);

}
